package com.um2.mauction.session.impl;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Remove;
import javax.ejb.Stateful;

import com.um2.mauction.entity.Categorie;
import com.um2.mauction.entity.Produit;
import com.um2.mauction.entity.Utilisateur;
import com.um2.mauction.entity.Vente;
import com.um2.mauction.session.remote.AjoutProduitStatefulRemote;
import com.um2.mauction.session.remote.CategorieManagerRemote;
import com.um2.mauction.session.remote.ProduitManagerRemote;
import com.um2.mauction.session.remote.UserManagerRemote;
import com.um2.mauction.session.remote.VenteManagerRemote;

@Stateful
@Remote(AjoutProduitStatefulRemote.class)
public class AjoutProduitStatefulBean implements AjoutProduitStatefulRemote
{
	public static String RemoteJNDIName = AjoutProduitStatefulBean.class.getSimpleName() + "/remote";

	private int seller_id;
	private Produit produit;
	private Vente vente;	
	private Categorie categorie;

//	private int item_id;
//	private int sale_id;

	@EJB
	private ProduitManagerRemote product_manager;

	@EJB
	private VenteManagerRemote sale_manager;

	@EJB
	private CategorieManagerRemote cat_manager;

	@EJB
	private UserManagerRemote user_manager;

	@PostConstruct
	public void construct()
	{
		System.out.println("cb:construct - AjoutProduitStatefulBean");
	}

	public Produit getProduit() 
	{
		return produit;
	}

	public void setProduit(Produit produit) 
	{
		this.produit = produit;
	}

	public Vente getVente() 
	{
		return vente;
	}

	public void setVente(Vente vente) 
	{
		this.vente = vente;
	}

	@Remove
	public void annulerAjoutProduit()
	{
		produit=null;
		vente=null;
	}

	private void setCategorie(Categorie c)
	{
		this.categorie=c;
	}

	public Categorie getCategorie()
	{
		return categorie;
	}

	public void setCategorie(int ic)
	{

		try
		{
			Categorie ct = cat_manager.getCategorie(ic);
			setCategorie(ct);
		}
		catch(NullPointerException e){System.out.println("catégorie non trouvée");}
	}

	@Remove
	public void validerAjoutProduit()
	{
		int idprod = product_manager.addProduit(produit.getNomProduit(),
				produit.getDescProduit(),
				produit.getPhotoProduit(),
				produit.getEtatProduit(),
				getCategorie(),
				null);

		//(float montantInitial, float montantReserve, String dateDebut,
		//double duree, int etat, Utilisateur seller, Produit item

		int idvente = sale_manager.addVente(vente.getMontantInitial(),
				vente.getMontantReserve(),
				vente.getDateDebut(),
				vente.getDuree(),
				1,
				null,
				null
		);		

		Utilisateur persist_vendeur=user_manager.getUtilisateur(seller_id);
		Produit persist_produit=product_manager.getProduit(idprod);
		Vente persist_vente=sale_manager.getVente(idvente);
		//Categorie persist_categorie=null;

		persist_produit.setVente(persist_vente);	
		persist_vente.setItem(persist_produit);

		persist_vente.setSeller(persist_vendeur);
		persist_vendeur.getVentes().add(persist_vente);

		product_manager.mergeProduit(persist_produit);
		sale_manager.mergeVente(persist_vente);
		//user_manager.mergeUtisateur(persi_utilisateur);
	}

	public int getSeller_id() 
	{
		return seller_id;
	}

	public void setSeller_id(int seller_id) 
	{
		this.seller_id = seller_id;
	}
}